﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using itau.im.entidade;
using itau.im.negocio;
using EnterpriseLibraryWrapper;

namespace itau.im.gerador
{
    public static class FilaInclusaoPMT
    {
        static List<RegistroExecucaoCurva> filaInclusaoPMT = new List<RegistroExecucaoCurva>();

        public static void Adicionar(RegistroExecucaoCurva registro)
        {
            filaInclusaoPMT.Add(registro);
        }

        public static void ProcessarInclusaoPMT()
        {
            if (filaInclusaoPMT.Count > 0)
            {
                RegistroExecucaoCurva[] listaCopy = filaInclusaoPMT.ToArray<RegistroExecucaoCurva>();

                List<RegistroExecucaoCurva> listaRemocao = new List<RegistroExecucaoCurva>();

                for (int i = 0; i < listaCopy.Length; i++)
                {
                    try
                    {
                        IncluirExecucaoPMT(listaCopy[i]);
                        listaRemocao.Add(listaCopy[i]);
                    }
                    catch (Exception ex)
                    {
                        EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosGerador");
                    }
                }

                foreach (RegistroExecucaoCurva registro in listaRemocao)
                {
                    filaInclusaoPMT.Remove(registro);
                }
            }
        }

        public static void IncluirExecucaoPMT(RegistroExecucaoCurva registro)
        {
            try
            {
                ExecucaoCurvaBS execucaoCurvaBS = new ExecucaoCurvaBS();
                execucaoCurvaBS.CriarRegistroExecucaoCurva(registro);
            }
            catch (Exception ex) 
            {
                if (ex.InnerException != null
                    && ex.InnerException.Message.IndexOf("SQL0803N") == -1)
                {
                    throw new Exception(string.Format("Erro de chave primária na inclusão da execução da PMT. Código da curva: {0}. Data inclusão vigência: {1}. Data hora execução: {2}", registro.CodigoCurva, registro.DataInclusaoVigencia, registro.DataHoraExecucaoCurva));
                }
                else
                {
                    throw new Exception(string.Format("Erro na inclusão da execução da PMT. Código da curva: {0}. Data inclusão vigência: {1}. Data hora execução: {2}", registro.CodigoCurva, registro.DataInclusaoVigencia, registro.DataHoraExecucaoCurva));
                }
            }
        }
    }
}
